iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Kotlin

Kotlin快速轉職系列-勇者篇系列 第 6

Day03#2 任何字都是在它對應的領域上才有意義

  • 分享至 

  • xImage
  •  

「『保留字』是什麼?」勇者的聽力也很好。

「就是有特殊意義、用途的字,像之前提到的『if』、『when』、『else』就是Kotlin程式語言的『保留字』。」蕭凱琪稍微理解那隻貓咪嫌棄自己的原因了,看著勇者,她就越是發現異世界人和自己的差別。當然也可能勇者在異世界人裡也是身體素質特別好的那批人。但是,如果不是呢?蕭凱琪開始有點擔心了,就算沒有那些職業傷害,她體能也算不上好,這是現代上班族的通病,長時間待在辦公室。這麼一回想,似乎有幾個同事會在下班後運動和健身,她是不是早該效仿他們?

蕭凱琪想到做到,拼著一口氣開始仰臥起坐,但是才做了兩下就氣不順直接仰倒。

「所以如果我用Kotlin程式語言寫那個車牌罰單程式,也要避開販售這些車牌嗎?」勇者很紳士的等她不再呼呼喘氣後才繼續提問。

蕭凱琪口乾舌燥,把半瓶礦泉水喝掉後才回答:「不、不用,應該說,任何字都是在它對應的領域上才有意義,就像我們現在說的是中文,並不需要在意英文的語法。而程式語言的『保留字』是在程式碼範圍影響,除非程式裡在車牌號碼類型裡特別將『if』也當作特殊車牌處理,否則『if』車牌就和其他車牌沒有兩樣。」

蕭凱琪看勇者還有些不明白,也不意外。「在程式碼範圍會怎麼影響,我直接給你看更容易懂。」

勇者看著蕭凱琪把「continueCalculating」改成「if」後,這個「if」底部馬上出現紅色波浪線,隨後蕭凱琪就把游標移到了紅色波浪線上方,IntelliJ IDEA馬上顯示出現這則錯誤的原因訊息。

https://ithelp.ithome.com.tw/upload/images/20230920/201291970StDR9UGQg.png

「『property name』和『receiver type』又是什麼?」勇者問。

「如果錯誤訊息也有中文版就好了⋯⋯」蕭凱琪碎碎念。「不過直接翻譯成『屬性名稱』和『接收者類型』也很怪,難道我已經不懂中文了嗎?」工程師良好品質之一的「自我質疑」,蕭凱琪似乎有過度發作的傾向,勇者不得不使用物理攻擊讓她回神。

「啊,抱歉,我們剛剛在說『property name』和『receiver type』對吧?說到這個,就必須說明變數、類別和函式呢。這可不是一個晚上能說明清楚的事情,我還是先回答之前說的『?』作用吧。」

蕭凱琪將畫面移動到『?』所在的位置,並且用兩個手指操控觸控版使相關程式碼放大。

https://ithelp.ithome.com.tw/upload/images/20230920/20129197GY4HmTIehc.png

「你的觀察力這麼好,想必你有注意到三個『readLine()』裡有一個沒有用到『?』。」

勇者的確有注意到,這也是他當初提問的原因。如果三個「readLine()」都有『?』,他會以為這是使用「readLine()」的規則,但是偏偏有一個沒有『?』,這就引起他的注意了。勇者自己也有幾個猜測。「所以輸入的是數字才需要『?』嗎?」

「呃,不是,我先說明『?』的作用,有『?』存在的地方就代表這裡有可能出現『Null』,比如說你在應該輸入數字的時候沒輸入數字而是直接按下Enter鍵,那『readLine()』就會傳回『Null』,在這種情形下這個計算機程式就當作輸入的是數字零,所以才會在『?:』後面放0.0。」

勇者重新執行程式,果然如蕭凱琪所說的,沒輸入的數字被當作零了。

https://ithelp.ithome.com.tw/upload/images/20230920/20129197NDFaq4i7Xy.png

蕭凱琪示意勇者不用關閉程式,這次她在第一個數字輸入文字k,而結果竟然和上次一樣,非數字的k被當作了零。

https://ithelp.ithome.com.tw/upload/images/20230920/20129197eq60LhziEi.png

蕭凱琪向勇者解釋:「這是『toDoubleOrNull()』發揮的效果,只要輸入的內容不能轉換成小數,就會傳回『Null』。」

「那為什麼運算符不用處理『Null』的情形呢?它雖然沒用到『toDoubleOrNull()』,但是『readLine()』可能會傳回『Null』不是嗎?」

蕭凱琪並不急著解答勇者的疑惑:「這你試試就知道了。」

勇者輸入後,恍然大悟:「『無效的運算符』!原來被當作『else』的情況了!」

「沒錯,既然已經有『when』,就沒有必要分成兩階段判斷。」蕭凱琪覺得程式越乾淨越好,以後如果要改變預設值也只要改一個地方。就是老闆有時候會以程式修改的行數算KPI,讓蕭凱琪覺得有點委屈。

蕭凱琪沒有沈浸在過去的悲傷太久,和勇者道過晚安後,為避免隔天肌肉痠痛,於是召喚了隔音浴室沖了個熱水澡。

躺上床後她將大腦清空,不想讓自己在夢裡也在寫程式碼。


上一篇
Day03#1 Null即是黑洞
下一篇
Day04#1 變數、類別和函式的定義和用途
系列文
Kotlin快速轉職系列-勇者篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言